package one.stand.mapper;

import one.stand.model.ShareRecordModel;
import one.stand.response.statistics.share.*;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * Created by renz on 2019/10/23 23:45
 */
public interface ShareRecordMapper {
    int insertReturningId(ShareRecordModel model);

    /**
     * 分享概况统计
     *
     * @param companyId 统计的企业id
     * @param beginDate 开始时间
     * @param endDate   结束时间
     * @return 统计结果
     */
    ShareUserAndCountStatistics shareUserAndCountStatistics(Integer companyId, String beginDate, String endDate);

    /**
     * 分享类型统计
     */
    List<ShareTypeStatistics> shareTypeStatistics(Integer companyId, String beginDate, String endDate);

    /**
     * 分享者性别统计
     */
    List<ShareGenderStatistics> shareGenderStatistics(Integer companyId, String beginDate, String endDate);

    /**
     * 根据时间进行topN 查询
     */
    List<ShareUserTopNResponse> topN(Integer companyId, Integer topN, String beginDate, String endDate);

    /**
     * 根据分享用户id，查询分享类型统计
     */
    List<ShareTypeDetailsStatisticsRepository> shareTypeDetailsStatistics(Integer companyId, Integer userId, String beginDate, String endDate);

    /**
     * 增加打开分享次数
     */
    int addShareOpenCountById(Integer recordId, Date lastOpenTime);

    /**
     * 增加打开分享次数
     */
    int addShareOpenCount(String uuid, Date lastOpenTime);

    List<ShareRecordModel> selectByCompanyIdAndShareTypeAndItemId(int companyId, int shareType, Integer itemId);

    List<ShareRecordModel> selectWithUserInfoByCompanyIdAndShareTypeAndItemId(int companyId, int shareType, Integer itemId);


    /**
     * 通过企业id 查看类型 类目id 时间降序 查询浏览列表
     *
     * @param companyId    企业id
     * @param seeType   查看类型
     * @param itmeId 类目id
     * @return 访问时间倒序排列
     */
    List<ShareRecordModel> getSeeRecordsByItemId(@Param("companyId") Integer companyId, @Param("seeType") Integer seeType, @Param("itmeId") Integer itmeId);

    ShareRecordModel selectByShardRecordId(Integer recordId);

    ShareRecordModel selectByUUID(String uuid);
}
